home *** CD-ROM | disk | FTP | other *** search
- package mx.skins
- {
- import flash.display.DisplayObject;
- import flash.display.DisplayObjectContainer;
- import flash.display.Graphics;
- import flash.display.Loader;
- import flash.display.LoaderInfo;
- import flash.display.Shape;
- import flash.events.ErrorEvent;
- import flash.events.Event;
- import flash.events.IOErrorEvent;
- import flash.geom.Rectangle;
- import flash.net.URLRequest;
- import flash.system.ApplicationDomain;
- import flash.system.LoaderContext;
- import flash.utils.getDefinitionByName;
- import mx.core.Container;
- import mx.core.EdgeMetrics;
- import mx.core.FlexLoader;
- import mx.core.FlexShape;
- import mx.core.IChildList;
- import mx.core.mx_internal;
- import mx.resources.ResourceBundle;
- import mx.styles.ISimpleStyleClient;
- import mx.utils.StringUtil;
-
- use namespace mx_internal;
-
- public class RectangularBorder extends Border
- {
- private static var resourceNotLoaded:String;
-
- mx_internal static const VERSION:String = "2.0.1.0";
-
- private static var packageResources:ResourceBundle = ResourceBundle.getResourceBundle("skins",ApplicationDomain.currentDomain);
-
- loadResources();
-
- private var backgroundImageWidth:Number;
-
- private var backgroundImageStyle:Object;
-
- mx_internal var loader:Loader;
-
- private var backgroundMask:Shape;
-
- private var backgroundImageHeight:Number;
-
- private var _backgroundImageRect:Rectangle;
-
- private var backgroundImage:DisplayObject;
-
- public function RectangularBorder()
- {
- super();
- addEventListener(Event.REMOVED,removedHandler);
- }
-
- private static function loadResources() : void
- {
- resourceNotLoaded = packageResources.getString("notLoaded");
- }
-
- override protected function updateDisplayList(param1:Number, param2:Number) : void
- {
- var newStyle:Object = null;
- var cls:Class = null;
- var imgParent:DisplayObjectContainer = null;
- var childrenList:IChildList = null;
- var newStyleObj:DisplayObject = null;
- var loaderContext:LoaderContext = null;
- var unscaledWidth:Number = param1;
- var unscaledHeight:Number = param2;
- if(!parent)
- {
- return;
- }
- newStyle = getStyle("backgroundImage");
- if(newStyle != backgroundImageStyle)
- {
- backgroundImageStyle = newStyle;
- if(backgroundImage)
- {
- imgParent = backgroundImage.parent;
- childrenList = imgParent is Container ? Container(imgParent).rawChildren : IChildList(imgParent);
- childrenList.removeChild(backgroundImage);
- }
- backgroundImage = null;
- if(Boolean(newStyle) && Boolean(newStyle as Class))
- {
- cls = Class(newStyle);
- initBackgroundImage(new cls());
- }
- else if(Boolean(newStyle) && newStyle is String)
- {
- try
- {
- cls = Class(getDefinitionByName(String(newStyle)));
- }
- catch(e:Error)
- {
- }
- if(cls)
- {
- newStyleObj = new cls();
- initBackgroundImage(newStyleObj);
- }
- else
- {
- mx_internal::loader = new FlexLoader();
- mx_internal::loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeEventHandler);
- mx_internal::loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorEventHandler);
- mx_internal::loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR,errorEventHandler);
- loaderContext = new LoaderContext();
- loaderContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
- mx_internal::loader.load(new URLRequest(String(newStyle)),loaderContext);
- }
- }
- else if(newStyle)
- {
- throw new Error(StringUtil.substitute(resourceNotLoaded,newStyle));
- }
- }
- if(backgroundImage)
- {
- mx_internal::adjustBackgroundImage();
- }
- }
-
- private function completeEventHandler(param1:Event) : void
- {
- var _loc2_:DisplayObject = null;
- if(!parent)
- {
- return;
- }
- _loc2_ = DisplayObject(LoaderInfo(param1.target).loader);
- initBackgroundImage(_loc2_);
- mx_internal::adjustBackgroundImage();
- dispatchEvent(param1.clone());
- }
-
- mx_internal function get backgroundImageRect() : Rectangle
- {
- return _backgroundImageRect;
- }
-
- private function getBackgroundSize() : Number
- {
- var _loc1_:Number = NaN;
- var _loc2_:Object = null;
- var _loc3_:int = 0;
- _loc1_ = NaN;
- _loc2_ = getStyle("backgroundSize");
- if(Boolean(_loc2_) && _loc2_ is String)
- {
- _loc3_ = int(_loc2_.indexOf("%"));
- if(_loc3_ != -1)
- {
- _loc1_ = Number(_loc2_.substr(0,_loc3_));
- }
- }
- return _loc1_;
- }
-
- mx_internal function adjustBackgroundImage() : void
- {
- var _loc1_:DisplayObject = null;
- var _loc2_:EdgeMetrics = null;
- var _loc3_:* = false;
- var _loc4_:Number = NaN;
- var _loc5_:Number = NaN;
- var _loc6_:Number = NaN;
- var _loc7_:Number = NaN;
- var _loc8_:Number = NaN;
- var _loc9_:Number = NaN;
- var _loc10_:Number = NaN;
- var _loc11_:Number = NaN;
- var _loc12_:Number = NaN;
- var _loc13_:Number = NaN;
- var _loc14_:Graphics = null;
- _loc1_ = parent;
- _loc2_ = _loc1_ is Container ? Container(_loc1_).viewMetrics : borderMetrics;
- _loc3_ = getStyle("backgroundAttachment") != "fixed";
- if(_backgroundImageRect)
- {
- _loc9_ = _backgroundImageRect.width;
- _loc10_ = _backgroundImageRect.height;
- }
- else
- {
- _loc9_ = width - _loc2_.left - _loc2_.right;
- _loc10_ = height - _loc2_.top - _loc2_.bottom;
- }
- _loc4_ = getBackgroundSize();
- if(isNaN(_loc4_))
- {
- _loc11_ = 1;
- _loc12_ = 1;
- }
- else
- {
- _loc13_ = _loc4_ * 0.01;
- _loc11_ = _loc13_ * _loc9_ / backgroundImageWidth;
- _loc12_ = _loc13_ * _loc10_ / backgroundImageHeight;
- }
- backgroundImage.scaleX = _loc11_;
- backgroundImage.scaleY = _loc12_;
- _loc5_ = Math.round(0.5 * (_loc9_ - backgroundImageWidth * _loc11_));
- _loc6_ = Math.round(0.5 * (_loc10_ - backgroundImageHeight * _loc12_));
- backgroundImage.x = _loc2_.left;
- backgroundImage.y = _loc2_.top;
- backgroundMask.x = _loc2_.left;
- backgroundMask.y = _loc2_.top;
- if(_loc3_ && _loc1_ is Container)
- {
- _loc5_ -= Container(_loc1_).horizontalScrollPosition;
- _loc6_ -= Container(_loc1_).verticalScrollPosition;
- }
- backgroundImage.alpha = getStyle("backgroundAlpha");
- backgroundImage.x += _loc5_;
- backgroundImage.y += _loc6_;
- _loc7_ = width - _loc2_.left - _loc2_.right;
- _loc8_ = height - _loc2_.top - _loc2_.bottom;
- if(backgroundMask.width != _loc7_ || backgroundMask.height != _loc8_)
- {
- _loc14_ = backgroundMask.graphics;
- _loc14_.clear();
- _loc14_.beginFill(16777215);
- _loc14_.drawRect(0,0,_loc7_,_loc8_);
- _loc14_.endFill();
- }
- }
-
- private function errorEventHandler(param1:Event) : void
- {
- }
-
- private function initBackgroundImage(param1:DisplayObject) : void
- {
- var _loc2_:IChildList = null;
- var _loc3_:int = 0;
- backgroundImage = param1;
- if(param1 is Loader)
- {
- backgroundImageWidth = Loader(param1).contentLoaderInfo.width;
- backgroundImageHeight = Loader(param1).contentLoaderInfo.height;
- }
- else
- {
- backgroundImageWidth = backgroundImage.width;
- backgroundImageHeight = backgroundImage.height;
- if(param1 is ISimpleStyleClient)
- {
- ISimpleStyleClient(param1).styleName = styleName;
- }
- }
- _loc2_ = parent is Container ? Container(parent).rawChildren : IChildList(parent);
- backgroundMask = new FlexShape();
- backgroundMask.name = "backgroundMask";
- backgroundMask.x = 0;
- backgroundMask.y = 0;
- _loc2_.addChild(backgroundMask);
- _loc3_ = int(_loc2_.getChildIndex(this));
- _loc2_.addChildAt(backgroundImage,_loc3_ + 1);
- backgroundImage.mask = backgroundMask;
- }
-
- mx_internal function set backgroundImageRect(param1:Rectangle) : void
- {
- _backgroundImageRect = param1;
- invalidateDisplayList();
- }
-
- mx_internal function get hasBackgroundImage() : Boolean
- {
- return backgroundImage != null;
- }
-
- private function removedHandler(param1:Event) : void
- {
- var _loc2_:IChildList = null;
- _loc2_ = parent is Container ? Container(parent).rawChildren : IChildList(parent);
- if(backgroundImage)
- {
- _loc2_.removeChild(backgroundImage);
- backgroundImage = null;
- }
- if(backgroundMask)
- {
- _loc2_.removeChild(backgroundMask);
- backgroundMask = null;
- }
- }
- }
- }
-
-